Technical Q&A

Java 08 - Java の 'aete' (1999 年 5 月 17 日)


Q: スクリプト対応のテキストエディタを使って Java アプリケーション用の辞書を開くと、'aete' が次のようにきわめて読みづらくなっています。

Salad:

toss:
public void Salad.toss(int)
toss reference
parameters int

'aete' を手作業で編集すればもっと読みやすくなるのはわかっていますが、それではちょっと面倒です。この情報の生成方法を指定する方法はありますか。

A: あります。イベント、クラス、メソッド、パラメータなどに関する情報は、Java クラスの内部を調べることによって生成されます。クラスに対して BeanInfo を作成すれば、より人間が読みやすい用語を提供することができます。

特に、java.beans.MethodDescriptor を使うと、クラスのパラメータについての説明とメソッドの記述子を指定することができます。

たとえば、次のような Salad.java クラスがあるとします。
public class Salad
{
                  public void toss( int howHigh ){ ... }
}


この場合は、次のようにして SaladBeanInfo.java を作成できます。
import
                  java.beans.*;
                  import java.lang.reflect.*;
                  public class
                  SaladBeanInfo extends SimpleBeanInfo
{
                  public MethodDescriptor[ ] getMethodDescriptors()
    {
        MethodDescriptor md[ ] = new MethodDescriptor[1];
        try
                          {
           ParameterDescriptor[ ] pd = new ParameterDescriptor[1];
           pd[0] = new ParameterDescriptor();
           pd[0].setShortDescription( "Number of inches to toss" );
           pd[0].setName( "height" );
                  
           md[0] = new MethodDescriptor( getMethod( Salad.class, "toss" ), pd );
           md[0].setShortDescription( "Toss the salad vigorously." );
           return md;
         }
         catch ( IntrospectionException e )
         {
             e.printStackTrace();
         }
         return null;
    }
                  
     Method getMethod(
Class c, String methodName ) throws IntrospectionException
	{
		Method methods[ ][ ] = c.getMethods();
                  
		for ( int i = 0; i < methods.length; i++ )
		{
			if ( methods[i].getName().equals( methodName ))
			{
				return methods[i];
			}
		}
		throw new IntrospectionException( "No such method ¥"" + methodName + "¥"" );
	}
}


ここでのポイントは2つあります。1つは、メソッドの記述子を指定していることです。ここでは短い説明を設定しています (これによって、デフォルトで生成された 'aete' のメソッドのシグネチャが置き換えられます)。もう1つは、パラメータの記述子を指定していることです。これによってスクリプトの記述者は、デフォルトで生成された 'aete' を利用するアプリケーションに共通の「method object parameter {...}」というやっかいな構文を使わずに、次の構文を使うことができます。

toss of Salad "Green Salad" height 10

この構文は、次の構文よりも格段に理解しやすくなっています。

toss of Salad "Green Salad" parameters { 10 }


-- Michael Hopkins
Worldwide Developer Technical Support


Technical Q&As | Contents
Previous Question | Next Question

To contact us, please use the Contact Us page.